package cn.highedu.coolsharkhub.controller;

import cn.highedu.coolsharkhub.pojo.dto.CategoryDTO;
import cn.highedu.coolsharkhub.pojo.vo.CategoryManagementVO;
import cn.highedu.coolsharkhub.pojo.vo.CategoryVO;
import cn.highedu.coolsharkhub.service.CategoryService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 商品类别控制器类
 */
@RestController
public class CategoryController {
    Logger logger = LoggerFactory.getLogger(CategoryController.class);
    @Autowired
    private CategoryService categoryService;

    /**
     * 查询首页商品类别
     * @return 首页商品类别(Spring MVC会以JSON格式返回)
     */
    @GetMapping("/categories")
    public List<CategoryVO> findHomepageCategories() {
        logger.info("查询首页商品类别");
        return categoryService.findHomepageCategories();
    }

    /**
     * 查询管理页面商品分类
     * @return 管理页面商品分类
     */
    @GetMapping("/api/categories")
    public List<CategoryManagementVO> findManagementCategories() {
        logger.info("查询管理页面商品分类");
        return categoryService.findManagementCategories();
    }

    /**
     * 根据商品分类id删除商品分类
     * @param id 商品分类id、
     *           id为null或id为0时抛出BlankParameterException
     *           id不存在时抛出EntityNotFoundException
     *           id存在时删除商品分类
     * @return 删除结果
     */
    @DeleteMapping("/api/categories/{id}")
    @ResponseStatus(HttpStatus.NO_CONTENT) // 204
    public String deleteById(@PathVariable Integer id) {
        logger.info("根据商品分类id删除商品分类");
        //异常处理由GlobalExceptionHandler统一处理
        categoryService.deleteById(id);
        return "删除成功";
    }

    

    /**
     * 添加商品分类
     * @param categoryDTO 商品分类信息
     */
    @PostMapping("/api/categories")
    @ResponseStatus(HttpStatus.CREATED) // 201
    public String addCategory(@RequestBody CategoryDTO categoryDTO) {
        logger.info("添加商品分类");
        //异常处理由GlobalExceptionHandler统一处理
        categoryService.addCategory(categoryDTO);
        return "添加成功";
    }

    /**
     * 修改商品分类
     */
    @PutMapping("/api/categories/{id}")
    @ResponseStatus(HttpStatus.CREATED) // 201
    public String updateCategory(@PathVariable Integer id, @RequestBody CategoryDTO categoryDTO) {
        logger.info("修改商品分类");
        //异常处理由GlobalExceptionHandler统一处理
        categoryService.updateCategory(id, categoryDTO);
        return "修改成功";
    }
}
